package com.huike.clues.service;

import java.util.List;
import java.util.Set;
import com.huike.common.core.domain.TreeSelect;
import com.huike.common.core.domain.entity.SysMenu;
import com.huike.clues.domain.vo.RouterVo;

/**
 * 菜单 业务层
 *
 *
 */
public interface ISysMenuService
{




    /**
     * 根据用户ID查询权限
     *
     * @param userId 用户ID
     * @return 权限列表
     */
    public Set<String> selectMenuPermsByUserId(Long userId);

    /**
     * 根据用户ID查询菜单树信息
     *
     * @param userId 用户ID
     * @return 菜单列表
     */
    public List<SysMenu> selectMenuTreeByUserId(Long userId);



    /**
     * 构建前端路由所需要的菜单
     *
     * @param menus 菜单列表
     * @return 路由列表
     */
    public List<RouterVo> buildMenus(List<SysMenu> menus);

    /** 
     * @description: 根据菜单编号获取详细信息 
     * @param: menuId 
     * @return: com.huike.common.core.domain.entity.SysMenu 
     * @author STJ12138
     * @date: 2023/7/11 14:04
     */
    SysMenu getByMenuId(Long menuId);

    /**
     * @description: 新增菜单
     * @param: sysMenu
     * @return: void
     * @author STJ12138
     * @date: 2023/7/11 14:51
     */
    void addMenu(SysMenu sysMenu);

    /** 
     * @description: 修改菜单 
     * @param: sysMenu 
     * @return: void 
     * @author STJ12138
     * @date: 2023/7/11 15:02
     */
    void updateMenu(SysMenu sysMenu);

    /** 
     * @description: 删除菜单.存在子菜单或已分配,不允许删除 
     * @param: menuId 
     * @return: void 
     * @author STJ12138
     * @date: 2023/7/11 15:09
     */
    void deleteMenu(Long menuId);

    /** 
     * @description: 根据条件和用户id查询菜单 
     * @param: sysMenu
userId 
     * @return: java.util.List<com.huike.common.core.domain.entity.SysMenu> 
     * @author STJ12138
     * @date: 2023/7/11 16:36
     */
    List<SysMenu> selectMenuListByUserId(SysMenu sysMenu, Long userId);

    /** 
     * @description: 加载对应角色菜单列表树 
     * @param: roleId 
     * @return: com.huike.common.core.domain.TreeSelect 
     * @author STJ12138
     * @date: 2023/7/11 17:40
     */
    List<Integer> roleMenuTreeselect(Long roleId);

    /** 
     * @description: 构建前端所需要下拉树结构 
     * @param: checkedKeys 
     * @return: java.util.List<com.huike.common.core.domain.TreeSelect> 
     * @author STJ12138
     * @date: 2023/7/11 19:58
     */
    List<TreeSelect> buildMenuTreeSelect(List<SysMenu> checkedKeys);
}
